package cn.south.campus.admin.campus.model.vo;

import cn.south.campus.admin.campus.model.entity.Config;
import cn.south.campus.admin.campus.model.enums.ConfigTypeEnums;
import cn.south.campus.common.model.vo.BaseVO;
import cn.south.campus.common.utils.DateUtil;
import com.alibaba.fastjson2.JSON;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * <p>
 *
 * </p>
 *
 * @author chow
 * @since 2024/12/13 14:15
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class ConfigVo extends BaseVO {

    /**
     * 配置名称
     */
    @NotBlank(message = "配置名称不能为空")
    private String configName;

    /**
     * 配置键
     */
    @NotBlank(message = "配置键不能为空")
    private String configKey;

    /**
     * 配置值类型
     */
    @NotBlank(message = "配置值类型不能为空")
    private Integer configType;

    /**
     * 配置值
     */
    @NotNull(message = "配置值不能为空")
    private Object configValue;

    /**
     * 备注
     */
    private String remark;

    public static Config convert(ConfigVo vo) {
        if (vo == null) {
            return null;
        }
        Config config = new Config();
        config.setId(vo.getId());
        config.setConfigName(vo.getConfigName());
        config.setConfigKey(vo.getConfigKey());
        config.setConfigType(vo.getConfigType());
        config.setConfigValue(JSON.toJSONString(vo.getConfigValue()));
        config.setRemark(vo.getRemark());
        return config;
    }

    public static ConfigVo convert(Config config) {
        if (config == null) {
            return null;
        }
        ConfigVo vo = new ConfigVo();
        vo.setId(config.getId());
        vo.setConfigName(config.getConfigName());
        vo.setConfigKey(config.getConfigKey());
        vo.setConfigType(config.getConfigType());
        if (config.getConfigType().equals(ConfigTypeEnums.ARRAY.getCode())) {
            vo.setConfigValue(JSON.parseArray(config.getConfigValue()));
        } else if (config.getConfigType().equals(ConfigTypeEnums.MAP.getCode())) {
            vo.setConfigValue(JSON.parseObject(config.getConfigValue()));
        }else {
            vo.setConfigValue(config.getConfigValue());
        }
        vo.setRemark(config.getRemark());
        vo.setCreateTime(DateUtil.format(config.getCreateTime()));
        vo.setUpdateTime(DateUtil.format(config.getUpdateTime()));
        return vo;
    }
}
